home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Science / MAL ©P.f.Howden 1⁄1⁄89 / DIANALOG < prev    next >
Text File  |  1992-12-07  |  6KB  |  85 lines

  1. 1 CLS:CLEAR:RESTORE:PRINT"DIANALOG-DIFFERENTIAL ANALYZER-solves Groups of Initial value,Non/linear,":PRINT"Simultaneous,Ordinary Differential Equations of any Order.":DEFDBL A-G,R-S,U-Z
  2. 2 PRINT" Delete unneeded Equations from Lines 10-20.":PRINT"DEFINE:VARIABLES X(I,J)=X[identity number(>=1), differential order(>=0)]."
  3. 3 PRINT"Test eqns in listing DIANEQNS.TXT may be MERGEd & appear below DIANALOG ,"
  4. 4 PRINT"or TYPE EQUATIONS ON LINES 10-20 at end of LISTING,highest order on left.":PRINT"eg:  10 X(1,2)=X(1,1)*X(2,0)+T    .............. ":PRINT"       21 RETURN"
  5. 5 W=70:W0=W:W=W-1:W1=512:W2=342:N5=4:REM W=Screen TAB width. W1,W2=Screen width,height PIXELS.
  6. 6 PRINT"To CHANGE CONSTANTS when RUNning,STOP,pull down SHOW COMMAND window,":PRINT"enter new values (eg type K(5)=3),  CONTINUE.":PRINT"To CHANGE H in RUN,Press BREAK,NOTE ALL C(I,J) & RUN again from this latest":PRINT"position with new H."
  7. 7 PRINT"FOR checking,known analytical solutions can be typed on lines 430-459."
  8. 8 PRINT"Note optional ending conditions on line 390.":GOTO 30
  9. 10 
  10. 21 RETURN
  11. 30 PRINT:INPUT "NUMBER OF EQUATIONS=";Q:INPUT "MAXIMUM ORDER=";E:INPUT "STARTING TIME (0?)To=";T:INPUT "TIME INCREMENT (.1?)H=";H
  12. 40 DIM M$(4),X(Q+4,E),O(Q),A(Q,E-1),B(Q,E-1),C(Q,E-1),E(Q,E-1),D(Q,E-1),K(9),F(Q,E-1),G(Q,E-1),M(Q+4),Y(Q+4),V(Q+4)
  13. 50 FOR J=1 TO Q:IF Q=1 THEN O(1)=E:GOTO 60
  14. 55 PRINT"MAXIMUM DIFFERENTIAL ORDER OF VARIABLE";J;"=";:INPUT O(J)
  15. 60 FOR I=1 TO O(J):IF O(J)=0 THEN 73
  16. 70 PRINT"INITIAL C(";J;",";I-1;")=";:INPUT C(J,I-1)
  17. 73 NEXT I:NEXT J
  18. 80 INPUT "Any changeable equation CONSTANTS K(0)=";K(0):REM FOR 10 CONSTANTS,BUT SEE LINE 40 FOR CORRECT DIM K(9) IF MORE
  19. 100 INPUT "MENU: 0=PRINT RESULTS: 1=TIME PLOT: 2=GRAPH X-Y :";M1:IF M1=2 THEN PRINT"SEE REM NOTES ON LINE 745.":INPUT "PRESS RETURN TO CONTINUE";C$
  20. 110 IF M1=0 THEN INPUT "TIME MENU: 0=TIME DIVIDER: 1=TIME LIMIT: ";M2:GOTO 130
  21. 120 GOTO 150
  22. 130 IF M2=0 THEN INPUT "TIME DIVIDER T1( >=1)=";T1:GOTO 200
  23. 140 INPUT "TIME LIMIT T1=";T1:GOTO 200
  24. 150 PRINT"SET SCALES: X-AXIS ZERO,V(0-";W;")=";:INPUT V
  25. 160 IF M1=2 THEN GOSUB 720:GOTO 190
  26. 170 FOR J=1 TO Q:PRINT"X";J;" SCALE MULTIPLIER M(";J;")=";:INPUT M(J)
  27. 180 PRINT"X";J;" SCALE OFFSET Y(";J;")  (0?)=";:INPUT Y(J):NEXT J
  28. 190 INPUT "TIME DIVIDER T1( >=1) =";T1:PRINT
  29. 200 FOR I=1 TO Q:FOR J=1 TO O(I):X(I,J-1)=C(I,J-1):NEXT J:NEXT I
  30. 210 GOSUB 10: FOR I=1 TO Q:FOR J=1 TO O(I):A(I,J-1)=X(I,J):NEXT J:NEXT I:GOSUB 310:N=1:T=T+H
  31. 220 FOR J0=1 TO 2:GOSUB 10:REM INTEGRATORS FOLLOW TO LINE 290
  32. 230 FOR I=1 TO Q:FOR J=O(I) TO 1 STEP -1:X(I,J-1)=C(I,J-1)+H*(A(I,J-1)+X(I,J))/2:NEXT J:NEXT I:NEXT J0
  33. 240 GOSUB 10:FOR I=1 TO Q:FOR J=1 TO O(I):D(I,J-1)=X(I,J):B(I,J-1)=X(I,J-1)-C(I,J-1):NEXT J:NEXT I
  34. 250 GOSUB 310:N=N+1:T=T+H:GOSUB 260:GOTO 250
  35. 260 FOR I=1 TO Q:FOR J=1 TO O(I):E(I,J-1)=F(I,J-1):F(I,J-1)=B(I,J-1):G(I,J-1)=A(I,J-1):A(I,J-1)=D(I,J-1):NEXT J:NEXT I
  36. 270 FOR J0=1 TO 2:GOSUB 10
  37. 280 FOR I=1 TO Q:FOR J=O(I) TO 1 STEP -1:X(I,J-1)=C(I,J-1)+H*(G(I,J-1)+4*A(I,J-1)+X(I,J))/3+E(I,J-1):NEXT J:NEXT I:NEXT J0
  38. 290 GOSUB 10:FOR I=1 TO Q:FOR J=1 TO O(I):D(I,J-1)=X(I,J):B(I,J-1)=X(I,J-1)-C(I,J-1):NEXT J:NEXT I
  39. 300 RETURN
  40. 310 IF M2=1 THEN 390
  41. 320 IF P=0 OR P=T1 THEN P=1:GOTO 340
  42. 330 P=P+1:RETURN
  43. 340 IF M1=0 THEN 410
  44. 350 IF N=0 AND M1=1 THEN GOSUB 470
  45. 360 IF N=0 AND M1=2 THEN GOSUB 480
  46. 370 IF M1=2 THEN 740
  47. 380 GOTO 590
  48. 390 IF N=0 OR (H>0 AND T>=T1) OR (H<0 AND T<=T1) THEN 410:' OR other ending conditions eg.  IF X(1,0)>*X(2,2)>0  THEN 410
  49. 400 RETURN
  50. 410 BEEP:PRINT:INPUT "FOR SOLUTIONS,PRESS RETURN:";C$:PRINT"TIME T=";T;",  H=";H;",  ";N;"STEPS"
  51. 420 FOR I=1 TO Q:FOR J=1 TO O(I):PRINT"X(";I;",";J-1;")=";X(I,J-1):NEXT J:NEXT I
  52. 430 REM PRINT"ORT X1=";4*COS(T*SQR(6))+COS(T):REM ANALYTICAL SOLUTIONS FOR CHECKING SPECIFIC PROBLEMS CAN BE ENTERED ON LINES 430-459.
  53. 440 REM PRINT"ORT X2=";-2*COS(T*SQR(6))+2*COS(T)
  54. 450 REM PRINT"ORT X3=";EXP(T)-T-1
  55. 460 RETURN
  56. 470 PRINT"To=";T;"  T(10 SPACE)=";H*T1*10;"  H=";H:FOR J=1 TO Q:PRINT"FOR X";J;", v----v=";5/M(J);" :OFFSET=";Y(J):NEXT J:PRINT:REM ->PRINTER
  57. 480 FOR J=0 TO INT(W/5-1):M$(0)=M$(0)+"v----":NEXT J:IF M1=2 THEN 500
  58. 490 FOR J=0 TO W:M$(1)=M$(1)+"-":NEXT J:RETURN
  59. 500 CLS:PRINT:PRINT"v-x--v=";5/XM;":OFFSET=";XO;":To=";T;":H=";H:REM ->PRINTER
  60. 510 PRINT"I-Y--I=";5/YM;";OFFSET=";YO;"(vertical axis)":REM ->PRINTER
  61. 520 LOCATE 18,1:PRINT M$(0)
  62. 530 PSET((V+.5)*7+1,275):FOR J1=1 TO 8:FOR J2=1 TO 5:LINE-STEP(0,-7):LINE-STEP(3,0):LINE-STEP(-3,0):NEXT J2:LINE-STEP(3,0):LINE-STEP(-6,0):LINE-STEP(3,0):NEXT J1:RETURN:REM SETS VERTICAL AXIS.CHANGE IF NECESSARY.
  63. 590 FOR J=0 TO Q:V(J)=INT(V+M(J)*X(J,0)+Y(J)+.5):NEXT J:REM CAN PLOT OTHER VARIABLES
  64. 600 IF K=0 THEN K=1:M$(2)=M$(0):GOTO 620
  65. 610 M$(2)=M$(1)
  66. 620 IF(H>0 AND T>=0 AND K3=0) OR (L<0 AND T<=0 AND K3=0) THEN K3=1:K4=1
  67. 630 V$="+"
  68. 640 FOR J=0 TO Q:IF J=0 AND N0=10 THEN N0=0:GOTO 690
  69. 650 IF V(J)>W THEN V(J)=W:V$=">":GOTO 690
  70. 660 IF V(J)<0 THEN V(J)=0:V$="<":GOTO 690
  71. 670 IF J=0 THEN V$="l":GOTO 690
  72. 680 V$=CHR$(J+48):REM OR SELECT OTHER SYMBOLS.PRIORITY IS PROPORTIONAL TO J
  73. 690 IF K4=1 THEN V$="O"
  74. 700 M$(3)=LEFT$(M$(2),V(J)):M$(4)=MID$(M$(2),V(J)+2,W-V(J)):M$(2)=M$(3)+V$+M$(4)
  75. 710 NEXT J:PRINT M$(2):N0=N0+1:K4=0:RETURN:REM ->PRINTER
  76. 720 INPUT "XM,SCALE MULTIPLIER(+or-but not 0) =";XM:INPUT "XO,SCALE OFFSET (=0?)=";XO
  77. 730 INPUT "YM,SCALE MULTIPLIER(+or-but not 0) =";YM:INPUT "YO,SCALE OFFSET (=0?)=";YO:RETURN
  78. 740 VX=(V+.5+XO+XM*X(1,0))*7+1
  79. 745 REM CAN PUT TIME T OR DESIRED DIFFERENTIALS,VARIABLES,FUNCTIONS OF THEM OR AXES TRANSFORMS,INSTEAD OF X(1,0),X(2,0).CAN CHANGE SCALE FACTORS DURING RUN WITH BREAK,CONT.
  80. 750 VY=275-K6*10-(YO+YM*X(2,0))*7
  81. 755 IF VY>W2-60 AND N6=1 THEN LOCATE 18,1:K6=K6+2:K7=1:REM MOVES GRAPH UP WHEN VY IS BELOW SCREEN
  82. 760 IF N6=0 THEN N6=1:LOCATE 9,5:PRESET (VX,VY):X0=VX:Y0=VY:RETURN:REM STARTING ORIGIN,OFFSETS.
  83. 770 LINE (X0,Y0)-(VX,VY):X0=VX:Y0=VY:IF K7=1 THEN PRINT:PRINT:K7=0:Y0=VY-20:LOCATE 12,5:RETURN:ELSE RETURN:REM MAIN GRAPHING INCLUDING NEGATIVE Y OVERSHOOT
  84.          MACINTOSH LISTING
  85.